草庐IT

C++ pragma GCC system_header 指令

全部标签

c++ - 在 C++ 代码中使用的 C header 中转发声明枚举

你不能forwarddeclareanenuminC++,但你可以在C中。对于使用一些C++代码的C代码库,有没有一种方法可以在C中使用前向声明的枚举,当在C++中使用该header时(在extern"C"中)不会导致错误{..}block)?例子:extern"C"{enumMyEnum;}intmain(){return0;}GCC给出错误:error:useofenum‘MyEnum’withoutpreviousdeclarationenumMyEnum;^~~~~~Clang也失败了:error:ISOC++forbidsforwardreferencesto'enum'ty

c++ - 详细命名空间中的 using 指令是否有问题?

考虑这个库头:#include#include#includenamespaceLib{namespacedetail{usingnamespacestd;templatevoidsort_impl(istream&in,ostream&out){vectorv;{intn;in>>n;v.resize(n);}for(auto&i:v)cin>>i;sort(v.begin(),v.end());for(autoi:v)out(std::cin,std::cout);}}在此示例中,detail命名空间是否成功地将库的客户端(以及库的其余实现)与using-directive隔离开来

c++ - 是否可以在不修改 C++ 的情况下使用 C11 原子包含 C header ?

我正在尝试编写使用thisClibrary在C++应用程序中未经修改。它使用C11原子。考虑以下程序,我们可以将其放入名为main.cc的文件中。#include"mpscq.h"intmain(){}如果我用g++-std=c++11-cmain.cc编译它,我会得到一整套错误,如下所示。usr/lib/gcc/x86_64-linux-gnu/4.9/include/stdatomic.h:68:9:error:‘_Atomic’doesnotnameatypetypedef_Atomic__UINT_FAST32_TYPE__atomic_uint_fast32_t;^/usr/

c++ - std::string header 仅在 Visual Studio 中吗?

看起来std::string是Community/VC/Tools/MSVC/?/include/xstring中的一个头文件,所有生成的代码应该是包含在构建目标中。如果我是对的,Microsoft如何保证下一个VisualStudio版本不会更改xstring和std::string内部结构?更新1:我对这个问题投了很多反对票,所以让我解释一下为什么我决定问这个问题。我遇到了奇怪的崩溃,我不明白为什么会这样。我使用最新的Qt5.13.0(MSVC2017_x64),我还有一些用VisualStudio2017编译的外部库。都有/MDd,我用dumpbinutil检查了这个。当我尝试运

c++ - 在 C++ 头文件中放置 using 指令的位置

对于我的项目,我使用了一些非常复杂的数据结构,例如std::unordered_map>>为了可读性,我想为其声明类型别名。我构建项目的代码已经通过在头文件中全局放置using语句来做到这一点://bar.h#ifndefBAR_H#defineBAR_H#include#include#include#include"foo.h"usingFooTable=std::unordered_map>>;classBar{FooTablecreate_foo();};#endif因为我的C++知识有点生疏,所以我只是采用了这种风格——但现在我读到以这种方式使用using可能会有问题,因为它

C++ Array of 120 ob​​jects with constructor + parameters, header- + sourcefile, no pointers please!

文件.h:externobjektsquares[120];文件.cpp:objektsquares[120]={objekt(objekt_size,objekt_size,-111,0)};我怎样才能一次初始化所有对象,所有对象都使用相同的参数? 最佳答案 不要使用原始数组(因为所有元素都将通过默认构造函数初始化)。使用例如一个std::vector:std::vectorsquares(120,objekt(objekt_size,objekt_size,-111,0)); 关于C

c++ - 防止 GCC 在使用 -mavx 和 -mfma 编译时自动使用 AVX 和 FMA 指令

如何使用AVX和FMA指令禁用自动矢量化?我仍然希望编译器自动使用SSE和SSE2,而不是FMA和AVX。我的代码使用AVX检查其可用性,但GCC在自动矢量化时不这样做。因此,如果我使用-mfma进行编译并在Haswell之前的任何CPU上运行代码,我将得到SIGILL。如何解决这个问题? 最佳答案 您要做的是为每个目标指令集编译不同的目标文件。然后创建一个cpu调度程序,它向CPUID询问可用的指令集,然后跳转到函数的适当版本。我已经在几个不同的问题和答案中对此进行了描述disable-avx2-functions-on-non-

C++ header 保护对象和用法?

我习惯于在我的元素周围放置护栏,例如:#ifndefSOMETHING_H#defineSOMETHING_HclassSomething{...}#endif但我得到了代码,他们也这样做了:#ifndefSOMETHING_H#include"something.h"#endif对于每一个包含。据说,这样更好。为什么?物体周围有守卫,这是否多余? 最佳答案 此处对此进行了非常详细的讨论:http://c2.com/cgi/wiki?RedundantIncludeGuards以下是亮点:是的,这是多余的,但对于某些编译器来说,它可

c++ - 允许用户包含类而不包含用于私有(private)的 header

抱歉标题又长又乱。我有一个这样的类头文件#pragmaonce#include#include#includeclassA{public:A();Method1();Method2();private:std::threadthread;boost::asio::socketsocket;another3dpartylib::doodadgizmo;}现在类的用户不会也不应该关心私有(private)部分。我怎样才能允许用户在不拖动的情况下包含类,和?从技术上讲,用户唯一应该关心的是sizeof(A).我错了吗? 最佳答案 C++中

c++ - 应该使用哪个 header 来使用 scoped_ptr

我想在我的C++应用程序中使用智能指针。使用stdscoped_ptr应该包含哪个头文件? 最佳答案 标准C++库中没有scoped_ptr。全部C++11smartpointers在标题中.如果你想要boost::scoped_ptr那么你需要boost/scoped_ptr.hpp. 关于c++-应该使用哪个header来使用scoped_ptr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q